package com.micai.springboot.controller.activiti.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.micai.springboot.controller.activiti.servicre.SyncDataService;
import com.micai.springboot.base.BaseController;
import com.micai.springboot.service.RoleService;
import com.micai.springboot.service.UserRoleService;
import com.micai.springboot.service.UserService;
import org.activiti.engine.*;
import org.activiti.spring.ProcessEngineFactoryBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * @Auther: zhaoxinguo
 * @Date: 2018/10/17 11:20
 * @Description:
 */
public abstract class AbstractActivitiController extends BaseController {

    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractActivitiController.class);

    @Autowired
    protected SyncDataService syncDataService;

    @Autowired
    protected UserService userService;

    @Autowired
    protected RoleService roleService;

    @Autowired
    protected UserRoleService userRoleService;

    @Autowired
    protected ObjectMapper objectMapper;

    @Autowired
    protected ProcessEngineFactoryBean processEngine;

    @Autowired
    protected ProcessEngineConfiguration processEngineConfiguration;

    /**
     * 仓储服务 仓储服务可以用来部署我们的流程图，还可以创建我们的流程部署查询对象，用于查询刚刚部署的流程列表，便于我们管理流程
     */
    @Autowired
    protected RepositoryService repositoryService;

    /**
     * 运行时服务 运行时服务主要用来开启流程实例，一个流程实例对应多个任务，也就是多个流程节点，好比如请假审批是一个流程实例，部门主管，部门经理，总经理都是节点，我们开启服务是通过流程定义key或者流程定义id来开启的
     */
    @Autowired
    protected RuntimeService runtimeService;

    /**
     * 任务服务 任务服务是用来可以用来领取，完成，查询任务列表功能的
     */
    @Autowired
    protected TaskService taskService;

    /**
     * 历史服务 历史服务可以查看审批人曾经审批完成了哪些项目，审批项目总共花了多少时间，以及在哪个环节比较耗费时间等等，便于审批人查看历史信息
     */
    @Autowired
    protected HistoryService historyService;

    /**
     * 表单服务
     */
    @Autowired
    protected FormService formService;

    /**
     * 实体服务 主要是操作用户信息，用户分组信息等，组信息包括如部门表和职位表，我一般都是自己建表来存储用户信息和组信息的
     */
    @Autowired
    protected IdentityService identityService;


}
